#ifndef _PRISION_H_
#define _PRISION_H_

#include <vector>
#include <deque>

class Individual;


class Prision
{
  public:
    enum REWARDS {S = 0, D, C, T};
    enum PLAYS {DEFECT = 0, COOPERATE = 1, TOTAL_PLAYS};

  public:
    Prision(int p_rewards[4]);
    // Test a particular individual against all other individuals,
    // ... except himself.
    unsigned int pit(unsigned int p_gladiator_number,
        std::vector<Individual *> &p_gladiators);
    unsigned int play(Individual *player_a, Individual *player_b);


  private:
    // Prision rewards that we use for the games.
    int m_rewards[4];
    
  private:
    PLAYS selectPlay(Individual *p_player, std::deque<PLAYS> &p_oponent_history);
};


#endif /* _PRISION_H_ */
